package net.gcode.sdkscheduleparser.core;

import java.util.Calendar;
import java.util.Comparator;
import java.util.GregorianCalendar;

import net.fortuna.ical4j.model.TimeZone;
import net.fortuna.ical4j.model.TimeZoneRegistry;
import net.fortuna.ical4j.model.TimeZoneRegistryFactory;

public class Vorlesung {

	private int tag, monat, jahr, anfzeit, endzeit;
	private Calendar startDate= new GregorianCalendar(); 
	private Calendar endDate = new GregorianCalendar();
	private String bez, prof, raum, kurs, beschreibung;
	

	private TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
	private TimeZone timezone = registry.getTimeZone("Europe/Berlin");

	public Vorlesung(Calendar start,Calendar ende,String bez,String raum,String beschreigung){
		this.setStartDate(start);
		this.setEndDate(ende);
		this.setBez(bez);
		this.setRaum(raum);
		this.setBeschreibung(beschreigung);
	}
	public Vorlesung(int tag, int monat, int jahr, int anfzeit, int endzeit, String bez) {
		this.setTag ( tag);
		this.setMonat (monat);
		this.setJahr(jahr);
		this.setAnfzeit( anfzeit);
		this.setEndzeit ( endzeit);
		this.bez = bez;
		
		startDate.setTimeZone(timezone);
		endDate.setTimeZone(timezone);
		startDate.set(java.util.Calendar.SECOND, 0);
		endDate.set(java.util.Calendar.SECOND, 0);
		
	}
	
	

	public Vorlesung(int tag, int monat, int jahr, int anfzeit, int endzeit, String bez,
			String prof, String raum, String kurs) {
		this(tag, monat, jahr, anfzeit, endzeit, bez);
		this.prof = prof;
		this.raum = raum;
		this.kurs = kurs;
	}

	public int getAnfzeit() {
		return anfzeit;
	}

	public void setAnfzeit(int anfzeit) {
		this.anfzeit = anfzeit;
		String tmp=this.anfzeit+"";
		int stunde=Integer.parseInt(tmp.substring(0, tmp.length()-2));
		int min=Integer.parseInt(tmp.substring(tmp.length()-2, tmp.length()));
		startDate.set(java.util.Calendar.HOUR_OF_DAY, stunde);
		startDate.set(java.util.Calendar.MINUTE, min);
	}

	public String getBez() {
		return bez;
	}

	public void setBez(String bez) {
		this.bez = bez;
	}

	public int getEndzeit() {
		return endzeit;
	}

	public void setEndzeit(int endzeit) {
		this.endzeit = endzeit;
		String tmp=this.endzeit+"";
		
		endDate.set(java.util.Calendar.HOUR_OF_DAY, Integer.parseInt(tmp.substring(0, tmp.length()-2)));
		endDate.set(java.util.Calendar.MINUTE, Integer.parseInt(tmp.substring(tmp.length()-2, tmp.length())));
	
	}

	public int getJahr() {
		return jahr;
	}

	public void setJahr(int jahr) {
		this.jahr = jahr;
		startDate.set(java.util.Calendar.YEAR, this.jahr);
		endDate.set(java.util.Calendar.YEAR, this.jahr);
	}

	public String getKurs() {
		return kurs;
	}

	public void setKurs(String kurs) {
		this.kurs = kurs;
	}

	public int getMonat() {
		return monat;
	}

	public void setMonat(int monat) {
		this.monat = monat;
		startDate.set(java.util.Calendar.MONTH, this.getMonat()-1);
		endDate.set(java.util.Calendar.MONTH, this.getMonat()-1);
	}

	public String getProf() {
		return prof;
	}

	public void setProf(String prof) {
		this.prof = prof;
	}

	public String getRaum() {
		return raum;
	}

	public void setRaum(String raum) {
		this.raum = raum;
	}

	public int getTag() {
		return tag;
	}

	public void setTag(int tag) {
		this.tag = tag;
		startDate.set(java.util.Calendar.DAY_OF_MONTH, this.getTag());
		endDate.set(java.util.Calendar.DAY_OF_MONTH, this.getTag());
	}

	public Calendar getStartDate() {
		return startDate;
	}

	public void setStartDate(Calendar startDate) {
		this.startDate = startDate;
	}

	public Calendar getEndDate() {
		return endDate;
	}

	public void setEndDate(Calendar endDate) {
		this.endDate = endDate;
	}

	public int compare(Vorlesung v2) {
		String vor1 = "" + jahr + (monat < 10 ? "0" + monat : monat) + (tag < 10 ? "0" + tag : tag)
				+ (anfzeit < 1000 ? "0" + anfzeit : anfzeit);
		int monat = v2.getMonat();
		int tag = v2.getTag();
		int anfzeit = v2.getAnfzeit();
		String vor2 = "" + v2.getJahr() + (monat < 10 ? "0" + monat : monat)
				+ (tag < 10 ? "0" + tag : tag) + (anfzeit < 1000 ? "0" + anfzeit : anfzeit);
		long vl1 = Long.parseLong(vor1);
		long vl2 = Long.parseLong(vor2);
		if (vl1 < vl2) {
			return -1;
		}
		if (vl1 == vl2) {
			return 0;
		}
		return 1;
	}

	@Override
	public String toString() {
		String ret;
		int min = getAnfzeit() % 100;
		ret = "Anfang: \t" + (getAnfzeit() / 100) + "." + (min < 10 ? "0" + min : min) + " Uhr\n";
		min = getEndzeit() % 100;
		ret += "Ende: \t\t" + (getEndzeit() / 100) + "." + (min < 10 ? "0" + min : min) + " Uhr\n";
		int tag = getTag();
		int mon = getMonat();
		ret += "Datum: \t\t" + (tag < 10 ? "0" + tag : tag) + "." + (mon < 10 ? "0" + mon : mon)
				+ "." + getJahr() + "\n";
		ret += "Bezeichnung: \t" + getBez() + "\n";
		ret += "Professor: \t" + getProf() + "\n";
		ret += "Raum: \t\t" + getRaum() + "\n";
		if (getKurs() != null) {
			ret += "Kurs(e): \t" + getKurs() + "\n";
		}
		ret += "_______________________________________________\n";
		return ret;
	}
	public String getBeschreibung() {
		return beschreibung;
	}
	public void setBeschreibung(String beschreibung) {
		this.beschreibung = beschreibung;
		String[] arr=beschreibung.split("\n");
		for(String atr: arr){
			if(atr.startsWith("Dozent:")){
				this.setProf(atr.split(":")[1]);
			}
			
		}
	}
}

class VorlesungComparator implements Comparator<Vorlesung> {
	@Override
	public int compare(Vorlesung v1, Vorlesung v2) {

		String vor1 = "" + v1.getJahr()
				+ (v1.getMonat() < 10 ? "0" + v1.getMonat() : v1.getMonat())
				+ (v1.getTag() < 10 ? "0" + v1.getTag() : v1.getTag())
				+ (v1.getAnfzeit() < 1000 ? "0" + v1.getAnfzeit() : v1.getAnfzeit());
		String vor2 = "" + v2.getJahr()
				+ (v2.getMonat() < 10 ? "0" + v2.getMonat() : v2.getMonat())
				+ (v2.getTag() < 10 ? "0" + v2.getTag() : v2.getTag())
				+ (v2.getAnfzeit() < 1000 ? "0" + v2.getAnfzeit() : v2.getAnfzeit());
		long vl1 = Long.parseLong(vor1);
		long vl2 = Long.parseLong(vor2);
		if (vl1 < vl2) {
			return -1;
		}
		if (vl1 == vl2) {
			return 0;
		}
		return 1;
	}
}
